import { Component } from 'cc';
import { ConstructorOf, Types } from '../../../../wing/assets/src';
import { ccclass } from '../decorators';
import { BaseView } from './BaseView';

/**
 * - 作者: DoooReyn
 * - 日期: 2023.10.31
 * - 名称: BaseUI
 * - 描述: UI 基类
 */
@ccclass('BaseUI')
export class BaseUI extends BaseView {
    /** 缓存数据 */
    protected _data: any;

    /** 关闭状态 */
    protected _closed: boolean = false;

    /** 关闭 */
    public async close(): Promise<void> {}

    /** 部署组件 */
    setupComponent<T extends Component>(cls: ConstructorOf<T>): T {
        return (this.getComponent(cls) || this.addComponent(cls))! as T;
    }

    /** 初始化 */
    async onInit(): Promise<void> {
        this.logger.debug('初始化');
    }

    /** 反初始化 */
    async onDeinit(): Promise<void> {
        this.logger.debug('反初始化');
    }

    /**
     * （打开 UI 后）更新数据
     * @param data 数据
     */
    async onData(data: any): Promise<void> {
        if (!Types.isNil(data)) {
            this.logger.debug('收到数据', data);
            this._data = data;
        }
    }

    /**
     * UI 即将打开
     * - 注意！此时尚未添加到父亲节点！
     */
    async onWillAdd(): Promise<void> {
        this.logger.debug('即将打开');
    }

    /** UI 已经打开 */
    async onAdded(): Promise<void> {
        this.logger.debug('已经打开');
    }

    /** UI 即将移除 */
    async onWillRemove(): Promise<void> {
        this.logger.debug('即将移除');
    }

    /**
     * UI 已经移除
     * - 注意！此时已经从父亲节点上移除！
     **/
    async onRemoved(): Promise<void> {
        this.logger.debug('已经移除');
    }
}
